package com.baizhi.util;

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

public class AliyunOSSUtil {

    private static String endpoint = "https://oss-cn-beijing.aliyuncs.com";//存储位置
    private static String accessKeyId = "LTAI4FysWpGskAzJsjBCVMPb";
    private static String accessKeySecret = "dIcPYJJjwIFpX2JFtUTnSMYw4UGp2c";//密钥

    /*
    * 文件上传
    * img文件
    * bucketName 存储空间名
    * objectName 文件名
    **/
    public static void uploadFile(String bucketName, String objectName, MultipartFile img){
        //阿里存储空间

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        //上传Byte数组
        byte[] bytes = null;
        try {
            //将MultipartFile转为字节数组
            bytes = img.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ossClient.putObject(bucketName,objectName,new ByteArrayInputStream(bytes));
        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 文件删除
     * bucketName 存储空间名
     * objectName 文件名
     *
     * */


    public static void delFile(String bucketName, String objectName){

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 删除文件。如需删除文件夹，请将ObjectName设置为对应的文件夹名称。如果文件夹非空，则需要将文件夹下的所有object删除后才能删除该文件夹。
        ossClient.deleteObject(bucketName, objectName);

        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /*
     * 视频截取帧并上传
     * 参数：
     *   bucketName(String): 存储空间名
     *   videoName(String): 要截取的视频名
     *   coverName(String): 保存的封面名
     * */
    public static URL interceptPhotoAndUpload(String bucketName, String videoName, String coverName){

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 设置视频截帧操作。
        String style = "video/snapshot,t_1000,f_jpg,w_1000,h_600";
        // 指定过期时间为10分钟。
        Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, videoName, HttpMethod.GET);
        req.setExpiration(expiration);
        req.setProcess(style);
        URL signedUrl = ossClient.generatePresignedUrl(req);
        System.out.println(signedUrl);

        // 上传网络流。
        InputStream inputStream = null;
        try {
            inputStream = new URL(signedUrl.toString()).openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ossClient.putObject(bucketName, coverName, inputStream);

        // 关闭OSSClient。
        ossClient.shutdown();
        return signedUrl;
    }


}
